<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>test</title>
<script>



//【示例1】为了理解顶级作用域和局部作用域异同，下面看一个示例。
var n = 1; 							// 全局变量，作用域为当前文档
function f(){
    var n = 2; 						// 局部变量，作用域仅限于函数体内
    function e(){					// 使用function语句定义的函数结构体
        return n; 					// 检测变量n到底返回什么值
    }
    return e; 						// 返回函数结构
}
alert(f()());						// 返回2，调用函数f的返回函数e
//【示例2】如果使用Function构造器定义函数e，则调用该返回函数时，返回的值是1，而不是2了，因为Function构造器定义的函数作用域需要动态确定，而不是在定义函数时确定的，所以具有全局作用域。
var n = 1; 							// 全局变量，作用域为当前文档
function f(){
    var n = 2; 						// 局部变量，作用域仅限于函数体内
    var e = new Function("return n;"); 	
		// 使用Function构造器定义的函数结构体
    return e; 						// 返回函数结构
}
alert(f()());						// 返回1，调用函数f的返回函数e
//【示例3】在下面示例中，分别把function语句定义的空函数和Function构造器定义的空函数放在一个循环体内，让它们空转十万次，则比较发现使用function语句定义的空函数运行效率高。
// 测试function语句定义的空函数执行效率
var a = new Date();			// 定义当前时间对象实例
var x = a.getTime();			// 获取当前时间的毫秒数
for(var i=0;i<100000;i++){		// 定义的循环结构体
    function(){					// 使用function语句定义的空函数
        ;
    }
}
var b = new Date();			// 定义当前时间对象实例
var y = b.getTime();			// 获取当前时间的毫秒数
alert(y-x); 					// 返回62，不同环境和浏览器会存在差异
// 测试Function构造器定义的空函数执行效率
var a = new Date();			// 定义当前时间对象实例
var x = a.getTime();			// 获取当前时间的毫秒数
for(var i=0;i<100000;i++){		// 定义的循环结构体
    new Function();				// 使用Function构造器定义的空函数
}
var b = new Date();			// 定义当前时间对象实例
var y = b.getTime();			// 获取当前时间的毫秒数
alert(y-x); 					// 返回2390，不同环境和浏览器会存在差异




</script>
</head>
<body>
</body>
</html>
